package w83a.ejie.general.filters;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

import w83a.w83aBeans.W83aUsuarioXLNetsBean;
import w83a.w83aUtilidadesComunes.W83aClsConstantes;
import w83a.w83aUtilidadesComunes.W83aClsTrazas;
import w83a.w83aUtilidadesComunes.W83aUtilidadesN38API;
import es.ejie.frmk.listeners.base.Q70ListenerUtils;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;

public class W83aCheckSecurityFilter
  implements Filter
{

  FilterConfig filterConfig = null;

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
  {
	HttpServletRequest httpRequest = (HttpServletRequest) request;
    
	Q70ContextoEJIE contexto = (Q70ContextoEJIE)httpRequest.getSession().getAttribute("contexto");
	try{
		
		if("on".equals(this.filterConfig.getInitParameter("ENCENDIDO"))){
			    if(-1==(httpRequest.getRequestURI()).indexOf("w83aPaginaBienvenida")
			    		&&-1==(httpRequest.getRequestURI()).indexOf("w83aerrorUserNoPermitido")
			    		&&-1==(httpRequest.getRequestURI()).indexOf("w83aerrorSesionCaducada")			    		){
			    	if(W83aUtilidadesN38API.comprobarExistenciaUsuarioXLNets(httpRequest)){
					    if(null!=contexto){
					    	W83aUsuarioXLNetsBean usuarioBean = (W83aUsuarioXLNetsBean)contexto.get(W83aClsConstantes.CONSTANTE_CONTEXTO_USUARIO);
						    if(null==usuarioBean||StringUtils.isEmpty(usuarioBean.getIdUsuario())){
						    	this.ir_Action((HttpServletRequest)request,response,Q70ListenerUtils.getApplicationProperty("PREFIJO_URL_DINAMICO")+"/comunJSP/w83aPaginaBienvenida.do");
						    }
						    /*PARA QUE AL ENTRAR AL STRUTS DE COMUN VAYA 
						     * A LA BÚSQUEDA DEL REG DE LA DELEGACIÓN*/
						/*    if((-1!=(contexto.getIdContexto()).indexOf("comunJSP")&&
						    		-1==(httpRequest.getRequestURI()).indexOf("comunJSP"))
						    		||(-1!=(httpRequest.getRequestURI()).indexOf("w83aVueltaRefrescarRegistroAutomaticoUsuarioDelegacion"))){
						    		if(StringUtils.isEmpty((String)contexto.get("actionAfterExtraLogin"))){
//						    			System.out.println("voy a logearme");
						    			contexto.set("actionAfterExtraLogin",httpRequest.getRequestURI());
						    			 this.ir_Action((HttpServletRequest)request,response,Q70ListenerUtils.getApplicationProperty("PREFIJO_URL_DINAMICO")+"/comunJSP/w83aRefrescarRegistroAutomaticoUsuarioDelegacion.do");						    			
						    		}else if(!((String)contexto.get("actionAfterExtraLogin")).equals(httpRequest.getRequestURI())){
//						    			System.out.println("voy al que me dicen que vaya "+(String)contexto.get("actionAfterExtraLogin"));
						    			httpRequest.getSession().invalidate();
						    			httpRequest.getSession(true);
						    			httpRequest.getSession().setAttribute("contexto", contexto);
						    			this.ir_Action((HttpServletRequest)request,response,(String)contexto.get("actionAfterExtraLogin"));						    			
						    		}
						    }*/
						    /*FIN DE REDIRECCIÓN A LA BUSQUEDAD DEL REG*/
					    }else{
					    	httpRequest.getSession().invalidate();
					    	httpRequest.getSession(true);
					    	httpRequest.getSession().setAttribute("contexto", contexto);
					    	this.ir_Action((HttpServletRequest)request,response,Q70ListenerUtils.getApplicationProperty("PREFIJO_URL_DINAMICO")+"/comunJSP/w83aPaginaBienvenida.do");
					    }
			    	}else{
			    		httpRequest.getSession().invalidate();
				    	httpRequest.getSession(true);
				    	httpRequest.getSession().setAttribute("contexto", contexto);
				    	this.ir_Action((HttpServletRequest)request,response,Q70ListenerUtils.getApplicationProperty("PREFIJO_URL_DINAMICO")+"/comunJSP/w83aerrorSesionCaducada.do");

			    	}
			    }
		}
//		System.out.println("voy a "+httpRequest.getRequestURI());
	    chain.doFilter(request, response);  
	}catch(IllegalStateException e){
		W83aClsTrazas.trazaError(null,"error en fichero Seguridad IllegalStateException->"+e.getMessage(),e.getCause());
		chain.doFilter(request, response);  
	}catch(Exception e){
		W83aClsTrazas.trazaError(null,"error en fichero Seguridad->"+e.getMessage(),e.getCause());
		chain.doFilter(request, response);  
	}
  }
	
  

  public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig = filterConfig;
  }

  public void destroy()
  {
	  this.filterConfig = null;
  }

  public void ir_Action(HttpServletRequest request,ServletResponse servletResponse,String action) throws ServletException, IOException{

		((HttpServletResponse)servletResponse).sendRedirect(action);
  }


public FilterConfig getFilterConfig() {
	return filterConfig;
}


public void setFilterConfig(FilterConfig filterConfig) {
	this.filterConfig = filterConfig;
}
  
  
}
